Les 11 variables: “Km” (kilométrage du véhicule), “Marque” (marque du véhicule), “Modèle” (modèle du véhicule), “Sous-modèle” (varient selon les options), “Type” (de carrosserie), “Cylindré” (moteur), “Litre” (mesure plus précise de la taille du moteur), “Portes” (Nombre de portes), “Régulateur”, “HP” (haut-parleurs Dolby stéréo), “Cuir” (intérieur cuir).
Les Marques, “Buick” , “Cadillac” , “Chevrolet” , “Pontiac” , “Saturn”, sont de fabrication americaine. La marque “SAAB” est de fabrication suedoise.
head(Base_Projet_Introduction_Modelisation_2024,7)
# La dimension du DataFrame (804 voitures et 12 variables)
dim(Base_Projet_Introduction_Modelisation_2024)
[1] 804 12
# Les Marques de voitures et leurs frequences
frequence_marque <- table(Base_Projet_Introduction_Modelisation_2024$Marque)
print(frequence_marque)
Buick Cadillac Chevrolet Pontiac SAAB Saturn
80 80 320 150 114 60
# Compte des Modèles de voitures et leurs frequences
frequence_modele <- table(Base_Projet_Introduction_Modelisation_2024$Modèle)
print(frequence_modele)
9-2X AWD 9_3 9_3 HO 9_5 9_5 HO
4 20 40 30 20
AVEO Bonneville Cavalier Century Classic
60 30 60 10 10
Cobalt Corvette CST-V CTS Deville
50 20 10 10 30
G6 Grand Am Grand Prix GTO Impala
20 20 30 10 30
Ion L Series Lacrosse Lesabre Malibu
50 10 30 20 60
Monte Carlo Park Avenue STS-V6 STS-V8 Sunfire
30 20 10 10 10
Vibe XLR-V8
30 10
# `Valeure minimale d'une voiture = 5.182.840 F CFA`
# `Valeure maximale d'une voiture = 42.449.034 F CFA`
prix_minimal <- min(Base_Projet_Introduction_Modelisation_2024$Prix)
prix_maximal <- max(Base_Projet_Introduction_Modelisation_2024$Prix)
print(paste("Le prix minimal en $ d'une voiture de marque americaine est egal a:", prix_minimal, ", " ,"soit:", 599.94 * prix_minimal, "F CFA"))
[1] "Le prix minimal en $ d'une voiture de marque americaine est egal a: 8638.93089526066 , soit: 5182840.20130268 F CFA"
print(paste("Le prix maximal en $ d'une voiture de marque americaine est egal a:", prix_maximal, ", " ,"soit:", 599.94 * prix_maximal, "F CFA"))
[1] "Le prix maximal en $ d'une voiture de marque americaine est egal a: 70755.4667165429 , soit: 42449034.7019227 F CFA"
num_vars des
variables categorielles cat_vars
num_vars <- Base_Projet_Introduction_Modelisation_2024[, sapply(Base_Projet_Introduction_Modelisation_2024, is.numeric)]
cat_vars <- Base_Projet_Introduction_Modelisation_2024[, sapply(Base_Projet_Introduction_Modelisation_2024, is.factor) | sapply(df, is.character)]
num_varshead(num_vars,7)
num_varscorrelations <- cor(num_vars)
correlations
Prix Km Cylindrée Litre
Prix 1.0000000 -0.143050506 0.56908614 0.55814581
Km -0.1430505 1.000000000 -0.02946099 -0.01864062
Cylindrée 0.5690861 -0.029460989 1.00000000 0.95789658
Litre 0.5581458 -0.018640622 0.95789658 1.00000000
Portes -0.1387497 -0.016944490 0.00220592 -0.07925909
Régulateur 0.4308515 0.025036652 0.35428485 0.37750927
HP -0.1243478 -0.026145926 -0.08970430 -0.06552707
Cuir 0.1571969 0.001005446 0.07551962 0.08733194
Portes Régulateur HP Cuir
Prix -0.13874965 0.43085149 -0.12434785 0.157196855
Km -0.01694449 0.02503665 -0.02614593 0.001005446
Cylindrée 0.00220592 0.35428485 -0.08970430 0.075519616
Litre -0.07925909 0.37750927 -0.06552707 0.087331945
Portes 1.00000000 -0.04767418 -0.06253031 -0.061968579
Régulateur -0.04767418 1.00000000 -0.09173015 -0.070573094
HP -0.06253031 -0.09173015 1.00000000 0.165443625
Cuir -0.06196858 -0.07057309 0.16544362 1.000000000
# Heatmap Correlation entre les variables numeriques `num_vars`
library(corrplot)
Avis : le package ‘corrplot’ a été compilé avec la version R 4.3.3
corrplot 0.92 loaded
corrplot(correlations, method = "color", type = "upper",
tl.col = "black", tl.srt = 45,
col = colorRampPalette(c("blue", "white", "red"))(200))
Prixdependante_var <- "Prix"
dependante_var
[1] "Prix"
Prixcor_avec_prix <- correlations[, dependante_var]
cor_avec_prix
Prix Km Cylindrée Litre Portes Régulateur
1.0000000 -0.1430505 0.5690861 0.5581458 -0.1387497 0.4308515
HP Cuir
-0.1243478 0.1571969
Prixtri_correlations <- sort(abs(cor_avec_prix), decreasing = TRUE)
tri_correlations
Prix Cylindrée Litre Régulateur Cuir Km
1.0000000 0.5690861 0.5581458 0.4308515 0.1571969 0.1430505
Portes HP
0.1387497 0.1243478
Les 3 variables les plus corrélées à la variable dépendante
Prix sont Cylindrée, Litre et
Régulateur
Prix,
Cylindrée: le model1
model1 <- lm(Prix ~ Cylindrée, data = num_vars)
summary(model1)
Call:
lm(formula = Prix ~ Cylindrée, data = num_vars)
Residuals:
Min 1Q Median 3Q Max
-11216 -5230 -2749 2773 38339
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -17.06 1126.94 -0.015 0.988
Cylindrée 4054.20 206.85 19.600 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 8133 on 802 degrees of freedom
Multiple R-squared: 0.3239, Adjusted R-squared: 0.323
F-statistic: 384.1 on 1 and 802 DF, p-value: < 2.2e-16
library(ggplot2)
Avis : le package ‘ggplot2’ a été compilé avec la version R 4.3.3
Use suppressPackageStartupMessages() to eliminate package
startup messages
library(plotly)
Avis : le package ‘plotly’ a été compilé avec la version R 4.3.3
Registered S3 method overwritten by 'data.table':
method from
print.data.table
Registered S3 method overwritten by 'htmlwidgets':
method from
print.htmlwidget tools:rstudio
Attachement du package : ‘plotly’
L'objet suivant est masqué depuis ‘package:ggplot2’:
last_plot
L'objet suivant est masqué depuis ‘package:stats’:
filter
L'objet suivant est masqué depuis ‘package:graphics’:
layout
p <- ggplot(num_vars, aes(x = Prix, y = Cylindrée)) +
geom_point(color = 'blue') +
geom_smooth(method = "lm", se = FALSE, color = 'red') +
labs(title = "Régression linéaire entre Prix et Cylindrée", x = "Prix", y = "Cylindrée")
p_interactif1 <- ggplotly(p)
`geom_smooth()` using formula = 'y ~ x'
p_interactif1
NA
Prix,
Litre: le model2model2 <- lm(Prix ~ Litre, data = num_vars)
summary(model2)
Call:
lm(formula = Prix ~ Litre, data = num_vars)
Residuals:
Min 1Q Median 3Q Max
-10186 -5128 -3172 3032 41614
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 6185.8 846.7 7.306 6.66e-13 ***
Litre 4990.4 262.0 19.050 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 8207 on 802 degrees of freedom
Multiple R-squared: 0.3115, Adjusted R-squared: 0.3107
F-statistic: 362.9 on 1 and 802 DF, p-value: < 2.2e-16
p <- ggplot(num_vars, aes(x = Prix, y = Litre)) +
geom_point(color = 'blue') +
geom_smooth(method = "lm", se = FALSE, color = 'red') +
labs(title = "Régression linéaire entre Prix et Litre", x = "Prix", y = "Litre")
p_interactif2 <- ggplotly(p)
`geom_smooth()` using formula = 'y ~ x'
p_interactif2
Prix,
Régulateur: le model3model3 <- lm(Prix ~ Régulateur, data = num_vars)
summary(model3)
Call:
lm(formula = Prix ~ Régulateur, data = num_vars)
Residuals:
Min 1Q Median 3Q Max
-14913 -6020 -1454 3634 46971
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 13921.9 632.7 22.00 <2e-16 ***
Régulateur 9862.3 729.4 13.52 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 8926 on 802 degrees of freedom
Multiple R-squared: 0.1856, Adjusted R-squared: 0.1846
F-statistic: 182.8 on 1 and 802 DF, p-value: < 2.2e-16
library(ggplot2)
library(plotly)
p <- ggplot(num_vars, aes(x = Prix, y = Régulateur)) +
geom_point(color = 'blue') +
geom_smooth(method = "lm", se = FALSE, color = 'red') +
labs(title = "Régression linéaire entre Prix et Régulateur", x = "Prix", y = "Régulateur")
p_interactif3 <- ggplotly(p)
`geom_smooth()` using formula = 'y ~ x'
p_interactif3
model1,
model2, model3)R-squared (R²) ,
Adjusted R-squared , AIC , BIC ,
Coefficients , p-value# Extraction des informations importantes pour la comparaison
models <- list(model1, model2, model3)
noms_models <- c("Model1 (Prix ~ Cylindrée)", "Model2 (Prix ~ Litre)", "Model3 (Prix ~ Régulateur)")
resultats_compares <- data.frame(
Model = noms_models,
R_squared = sapply(models, function(model) summary(model)$r.squared),
Adjusted_R_squared = sapply(models, function(model) summary(model)$adj.r.squared),
AIC = sapply(models, AIC),
BIC = sapply(models, BIC),
p_value = sapply(models, function(model) anova(model)$`Pr(>F)`[1])
)
print(resultats_compares)
NA
Le R_Squared : La proportion de la variance totale
des données qui est expliquée par le modèle1 est plus eleve
que ceux des 2 autres models. Plus le R-squared est élevé,
meilleur est l’ajustement du modèle aux données. Donc le
model1 est le meilleur model si nous nous basons uniquement
sur le R_Squared.
Adjusted_R_squared : La valeure de
l’Adjusted R-squared du model1 indique un
meilleur ajustement du modèle aux données car etant plus eleve. Donc le
model1 est le meilleur model si nous nous basons uniquement
sur l’Adjusted_R_squared.
Le model1 a la plus petite valeur d’AIC
(Akaike Information Criterion) donc il est le meilleur model.
Le BIC (Bayesian Information Criteria) du
model1 est plus bas que celui des 2 autres donc nous
choisisons le model1.
Le model1 a un variable prédictive
Cylindrée ayant un p-value significativement faible et est
considéré comme le meilleur car il indique une meilleure adéquation du
variable Cylindrée utilisée pour expliquer la variable
Prix
# Le Trace les résidus vs les valeurs ajustées pour chaque modèle
par(mfrow = c(1, 3)) # Disposition des graphiques en une ligne et trois colonnes
plot(model1$fitted.values, model1$residuals, main = "Model1 (Prix ~ Cylindrée)",
xlab = "Valeurs ajustées", ylab = "Résidus")
abline(h = 0, col = "red")
plot(model2$fitted.values, model2$residuals, main = "Model2 (Prix ~ Litre)",
xlab = "Valeurs ajustées", ylab = "Résidus")
abline(h = 0, col = "red")
plot(model3$fitted.values, model3$residuals, main = "Model3 (Prix ~ Régulateur)",
xlab = "Valeurs ajustées", ylab = "Résidus")
abline(h = 0, col = "red")
Model2 a une répartition uniforme et aléatoire des
résidus autour de la ligne zéro (ligne rouge). Une distribution uniforme
du model2 suggère que les erreurs de prédiction sont
réparties de manière équitable sur l’ensemble des donnees
num_vars.summary du model de regression
multiplemodel_reg_multiple <- lm(Prix ~ Km + Cylindrée + Litre + Portes + Régulateur + HP + Cuir, data = num_vars)
summary(model_reg_multiple)
Call:
lm(formula = Prix ~ Km + Cylindrée + Litre + Portes + Régulateur +
HP + Cuir, data = num_vars)
Residuals:
Min 1Q Median 3Q Max
-13278 -5615 -1556 3996 32819
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 6.759e+03 1.877e+03 3.601 0.000337 ***
Km -1.698e-01 3.187e-02 -5.326 1.31e-07 ***
Cylindrée 3.792e+03 6.832e+02 5.551 3.87e-08 ***
Litre -7.872e+02 8.671e+02 -0.908 0.364196
Portes -1.543e+03 3.205e+02 -4.814 1.77e-06 ***
Régulateur 6.289e+03 6.580e+02 9.558 < 2e-16 ***
HP -1.994e+03 5.718e+02 -3.487 0.000515 ***
Cuir 3.349e+03 5.977e+02 5.604 2.89e-08 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 7388 on 796 degrees of freedom
Multiple R-squared: 0.4463, Adjusted R-squared: 0.4414
F-statistic: 91.64 on 7 and 796 DF, p-value: < 2.2e-16
1 - Estimate (Estmations) :
Pour chaque kilometre Km de plus dans le compteur
d’une voiture, le Prix moyen diminue en moyenne de
1.698e-01 $ U.S soit 101.88 FCFA , si le taux
de conversion est 1$ = 6oo F CFA.
Pour chaque Cylindre de plus, le Prix moyen d’une
voiture augmente en moyenne de 3.792e+03 $ U.S soit
2.275.200 FCFA , si le taux de conversion est 1$ = 6oo F
CFA.
S’il y’a presence de Régulateur (cruise control), le
Prix moyen d’une voiture augmente en moyenne de
6.289e+03 $ U.S soit 3.773.400 FCFA , si le
taux de conversion est 1$ = 6oo F CFA.
Le fait que les sieges de la voiture sont en Cuir
fait augmenter le Prix moyen de la voiture en moyenne de
3.349e+03 $ U.S soit 2.009.400 FCFA, si le
taux de conversion est 1$ = 6oo F CFA.
La dimunition d’une unite du nombre de Portes de la
Voiture fait dimunier le Prix moyen en moyenne de
1.543e+03 $ U.S soit 925.800 FCFA, si le taux
de conversion est 1$ = 6oo F CFA.
Une non presence de haut-parleurs Dolby stéréo ( HP
) dans la voiture fait diminuer son Prix en moyenne de
1.994e+03 $ U.S soit 1.196.400 FCFA, si le
taux de conversion est 1$ = 6oo F CFA.
2 - Les codes de significativité : d’apres les codes,
les coefficients sont tous significatifs avec 3 etoiles (
*** ) sauf pour la variale Litre
plot(model_reg_multiple)
NA
shapiro.test(resid(model_reg_multiple))
Shapiro-Wilk normality test
data: resid(model_reg_multiple)
W = 0.92927, p-value < 2.2e-16
Le W = 0.92927 est tres proche de 1 donc les données
semblent suivre une distribution normale. La proximite a 1 indique une
adequation a la normalite.
la p-value = 0.00000000000000022 est inferieure au
seuil alpha=0,05 donc l’hypothese nulle H0 est
rejetee donc les donnees sont normalement distribuees.
38 prévisions avec des intervalles de
prévision et confiance de 95% et
99% avec le model1fit=valeure ajustee lwr=valeure minimale
upr=valeure maximale
38 Prédictions avec intervalle de
prédiction 95%predictions1 <- predict(model1, interval = "prediction", level = 0.95)
Avis dans predict.lm(model1, interval = "prediction", level = 0.95) :
les prédictions sur les données actuelles se réfèrent à des réponses _futures_
head(predictions1,38)
fit lwr upr
1 24308.16 8330.675 40285.64
2 24308.16 8330.675 40285.64
3 24308.16 8330.675 40285.64
4 24308.16 8330.675 40285.64
5 24308.16 8330.675 40285.64
6 24308.16 8330.675 40285.64
7 24308.16 8330.675 40285.64
8 24308.16 8330.675 40285.64
9 24308.16 8330.675 40285.64
10 24308.16 8330.675 40285.64
11 24308.16 8330.675 40285.64
12 24308.16 8330.675 40285.64
13 24308.16 8330.675 40285.64
14 24308.16 8330.675 40285.64
15 24308.16 8330.675 40285.64
16 24308.16 8330.675 40285.64
17 24308.16 8330.675 40285.64
18 24308.16 8330.675 40285.64
19 24308.16 8330.675 40285.64
20 24308.16 8330.675 40285.64
21 24308.16 8330.675 40285.64
22 24308.16 8330.675 40285.64
23 24308.16 8330.675 40285.64
24 24308.16 8330.675 40285.64
25 24308.16 8330.675 40285.64
26 24308.16 8330.675 40285.64
27 24308.16 8330.675 40285.64
28 24308.16 8330.675 40285.64
29 24308.16 8330.675 40285.64
30 24308.16 8330.675 40285.64
31 24308.16 8330.675 40285.64
32 24308.16 8330.675 40285.64
33 24308.16 8330.675 40285.64
34 24308.16 8330.675 40285.64
35 24308.16 8330.675 40285.64
36 24308.16 8330.675 40285.64
37 24308.16 8330.675 40285.64
38 24308.16 8330.675 40285.64
38 Prédictions avec intervalle de
prédiction 99%predictions2 <- predict(model1, interval = "prediction", level = 0.99)
Avis dans predict.lm(model1, interval = "prediction", level = 0.99) :
les prédictions sur les données actuelles se réfèrent à des réponses _futures_
head(predictions2, 38)
fit lwr upr
1 24308.16 3291.864 45324.45
2 24308.16 3291.864 45324.45
3 24308.16 3291.864 45324.45
4 24308.16 3291.864 45324.45
5 24308.16 3291.864 45324.45
6 24308.16 3291.864 45324.45
7 24308.16 3291.864 45324.45
8 24308.16 3291.864 45324.45
9 24308.16 3291.864 45324.45
10 24308.16 3291.864 45324.45
11 24308.16 3291.864 45324.45
12 24308.16 3291.864 45324.45
13 24308.16 3291.864 45324.45
14 24308.16 3291.864 45324.45
15 24308.16 3291.864 45324.45
16 24308.16 3291.864 45324.45
17 24308.16 3291.864 45324.45
18 24308.16 3291.864 45324.45
19 24308.16 3291.864 45324.45
20 24308.16 3291.864 45324.45
21 24308.16 3291.864 45324.45
22 24308.16 3291.864 45324.45
23 24308.16 3291.864 45324.45
24 24308.16 3291.864 45324.45
25 24308.16 3291.864 45324.45
26 24308.16 3291.864 45324.45
27 24308.16 3291.864 45324.45
28 24308.16 3291.864 45324.45
29 24308.16 3291.864 45324.45
30 24308.16 3291.864 45324.45
31 24308.16 3291.864 45324.45
32 24308.16 3291.864 45324.45
33 24308.16 3291.864 45324.45
34 24308.16 3291.864 45324.45
35 24308.16 3291.864 45324.45
36 24308.16 3291.864 45324.45
37 24308.16 3291.864 45324.45
38 24308.16 3291.864 45324.45
38 Prédictions avec intervalle de
confiance de 95%predictions3 <- predict(model1, interval = "confidence", level = 0.95)
head(predictions3,38)
fit lwr upr
1 24308.16 23671.61 24944.7
2 24308.16 23671.61 24944.7
3 24308.16 23671.61 24944.7
4 24308.16 23671.61 24944.7
5 24308.16 23671.61 24944.7
6 24308.16 23671.61 24944.7
7 24308.16 23671.61 24944.7
8 24308.16 23671.61 24944.7
9 24308.16 23671.61 24944.7
10 24308.16 23671.61 24944.7
11 24308.16 23671.61 24944.7
12 24308.16 23671.61 24944.7
13 24308.16 23671.61 24944.7
14 24308.16 23671.61 24944.7
15 24308.16 23671.61 24944.7
16 24308.16 23671.61 24944.7
17 24308.16 23671.61 24944.7
18 24308.16 23671.61 24944.7
19 24308.16 23671.61 24944.7
20 24308.16 23671.61 24944.7
21 24308.16 23671.61 24944.7
22 24308.16 23671.61 24944.7
23 24308.16 23671.61 24944.7
24 24308.16 23671.61 24944.7
25 24308.16 23671.61 24944.7
26 24308.16 23671.61 24944.7
27 24308.16 23671.61 24944.7
28 24308.16 23671.61 24944.7
29 24308.16 23671.61 24944.7
30 24308.16 23671.61 24944.7
31 24308.16 23671.61 24944.7
32 24308.16 23671.61 24944.7
33 24308.16 23671.61 24944.7
34 24308.16 23671.61 24944.7
35 24308.16 23671.61 24944.7
36 24308.16 23671.61 24944.7
37 24308.16 23671.61 24944.7
38 24308.16 23671.61 24944.7
38 Prédictions avec intervalle de
confiance de 99%predictions4 <- predict(model1, interval = "confidence", level = 0.99)
head(predictions4,38)
fit lwr upr
1 24308.16 23470.87 25145.45
2 24308.16 23470.87 25145.45
3 24308.16 23470.87 25145.45
4 24308.16 23470.87 25145.45
5 24308.16 23470.87 25145.45
6 24308.16 23470.87 25145.45
7 24308.16 23470.87 25145.45
8 24308.16 23470.87 25145.45
9 24308.16 23470.87 25145.45
10 24308.16 23470.87 25145.45
11 24308.16 23470.87 25145.45
12 24308.16 23470.87 25145.45
13 24308.16 23470.87 25145.45
14 24308.16 23470.87 25145.45
15 24308.16 23470.87 25145.45
16 24308.16 23470.87 25145.45
17 24308.16 23470.87 25145.45
18 24308.16 23470.87 25145.45
19 24308.16 23470.87 25145.45
20 24308.16 23470.87 25145.45
21 24308.16 23470.87 25145.45
22 24308.16 23470.87 25145.45
23 24308.16 23470.87 25145.45
24 24308.16 23470.87 25145.45
25 24308.16 23470.87 25145.45
26 24308.16 23470.87 25145.45
27 24308.16 23470.87 25145.45
28 24308.16 23470.87 25145.45
29 24308.16 23470.87 25145.45
30 24308.16 23470.87 25145.45
31 24308.16 23470.87 25145.45
32 24308.16 23470.87 25145.45
33 24308.16 23470.87 25145.45
34 24308.16 23470.87 25145.45
35 24308.16 23470.87 25145.45
36 24308.16 23470.87 25145.45
37 24308.16 23470.87 25145.45
38 24308.16 23470.87 25145.45
# Verification d'un quelconque ressemblance
identical(predictions1, predictions3)
[1] FALSE
# Verification d'un quelconque ressemblance
identical(predictions2, predictions4)
[1] FALSE
# Verification d'un quelconque ressemblance
identical(predictions1, predictions2)
[1] FALSE
identical(predictions3, predictions4)
[1] FALSE